#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* bigNumAdd(char **tmpRes,const char *left, const char *right){

    printf("%s\n%s\n", left, right);

    int leftLen = strlen(left), rightLen = strlen(right);
    int resLen =(leftLen > rightLen ? leftLen : rightLen) + 1;
    // 结果最长的位数是最大输入值再进 1 位
    char *res = *tmpRes;
    res = (char*)malloc(resLen);
    memset(res, 0, resLen);

    // 以
    int iL = leftLen - 1;
    int iR = rightLen - 1 ;
    for(int i = resLen -1 ; i  >= 0 ; --iL, --iR, --i){
        char s = 0;
        // 末尾累加
        if(iL >= 0){
            s += *(left+iL) - 48;
        }
        if(iR >= 0){
            s += *(right + iR) - 48;
        }
        *(res + i) += s;

        // 超过 10 进位
        if( *(res +i) >= 10 && i != 0){
            *(res +i -1) +=1;
            *(res +i) -= 10;
        }

        // 恢复 ascii 正确值
        *(res +i) += 48;
    }

    return res;
}


char* bigNumSub(char **tmpRes,const char *left, const char *right){
    return 0;
}

void release(void **p){
    if(*p){
        free(*p);
    }
    *p = NULL;
}

int main(){
    char *left  = "000123213218397214219837219649721";
    char *right = "982183762175298139216315252165312";
    char *res;
    res = bigNumAdd(&res, left, right);
    printf("%s\n", res);
    release(&res);

    return 0;
}
